package Linklist;

/**
 * @Classname JZ18删除链表的节点
 * @Description TODO
 * @Date 2023/2/9 21:37
 * @Created by xjl
 */
public class JZ18删除链表的节点 {
    class ListNode {
        int val;
        ListNode next;

        public ListNode(int val) {
            this.val = val;
        }
    }

    // 删除一个节点，需要考虑的是这个节点有可能是第一个 有可能是最后一个
    public ListNode deleteNode(ListNode head, int val) {
        ListNode node = new ListNode(-1);
        node.next = head;
        ListNode pre = node;
        ListNode curr = head;
        while (curr != null && curr.val != val) {
            pre=curr;
            curr=curr.next;
        }
        ListNode next = pre.next.next;
        pre.next = next;
        // 有可能第一个被删除了 因此一定是node.next才是正确的结果
        return node.next;
    }

    public ListNode deleteNode2(ListNode head, int val) {
        if (head==null){
            return null;
        }
        ListNode node=new ListNode(-1);
        node.next=head;
        ListNode pre=node;
        ListNode curr=head;
        while (curr!=null){
            ListNode future =curr.next;
            if (curr.val==val){
                curr=future;
                pre.next=future;
            }else {
                pre=curr;
                curr=future;
            }
        }
        return node.next;
    }
}
